package com.zm.dao.impl;

import com.zm.dao.IUserDao;
import com.zm.domain.User;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;

import java.util.List;

public class UserDaoImpl implements IUserDao {
    private SqlSessionFactory factory;
    public UserDaoImpl(SqlSessionFactory factory){
        this.factory=factory;
    }
    @Override
    public List<User> findAll() {
        //1.根据factory获取SqlSession对象
        SqlSession session=factory.openSession();
        //2.调用SqlSession中的方法，实6现查询列表
        List<User> users=
        session.selectList("com.zm.dao.IUserDao.findAll");
        //3.释放资源
        session.close();
        return users;
    }

    @Override
    public void saveUser(User user) {
        //1.根据factory获取SqlSession对象
        SqlSession session=factory.openSession();
        //2.调用SqlSession中的方法，实现保存插入
        List<User> users=
                session.selectList("com.zm.dao.IUserDao.saveUser",user);
        //3.提交事务
        session.commit();
        //4.释放资源
        session.close();
    }

    @Override
    public void updateUser(User user) {
        //1.根据factory获取SqlSession对象
        SqlSession session=factory.openSession();
        //2.调用SqlSession中的方法，实现更新
        List<User> users=
                session.selectList("com.zm.dao.IUserDao.updateUser",user);
        //3.提交事务
        session.commit();
        //4.释放资源
        session.close();
    }

    @Override
    public void deleteUser(Integer id) {
        //1.根据factory获取SqlSession对象
        SqlSession session=factory.openSession();
        //2.调用SqlSession中的方法，实现删除
        List<User> users=
                session.selectList("com.zm.dao.IUserDao.deleteUser",id);
        //3.提交事务
        session.commit();
        //4.释放资源
        session.close();

    }

    @Override
    public User findById(Integer id) {
        //1.根据factory获取SqlSession对象
        SqlSession session=factory.openSession();
        //2.调用SqlSession中的方法，实现按id查询
        User user=
               session.selectOne("com.zm.dao.IUserDao.findById",id);
        //3.释放资源
        session.close();
        return user;
    }

    @Override
    public List<User> findByName(String username) {
        //1.根据factory获取SqlSession对象
        SqlSession session=factory.openSession();
        //2.调用SqlSession中的方法，实现模糊查询
        List<User> users=
                session.selectList("com.zm.dao.IUserDao.findByName",username);
        //3.释放资源
        session.close();
        return users;
    }

    @Override
    public int findTotal() {
        //1.根据factory获取SqlSession对象
        SqlSession session=factory.openSession();
        //2.调用SqlSession中的方法，实现模糊查询
        Integer count=
                session.selectOne("com.zm.dao.IUserDao.findTotal");

        //3.释放资源
        session.close();
        return count;

    }
}
